/*******************************************************************************
** 文件名称：soft_timer.h
** 文件作用：软件定时器头文件
** 编写作者：Tom Free 付瑞彪
** 编写时间：2018-11-03
** 文件备注：
**
**
** 更新记录：
**          2018-11-03 -> 创建文件                          <Tom Free 付瑞彪>
**
**
**       Copyright (c) 深圳市三派智能科技有限公司 All Rights Reserved
**
**       1 Tab == 4 Spaces     UTF-8     ANSI C Language(C99)
*******************************************************************************/
#ifndef __SOFT_TIMER_H__
#define __SOFT_TIMER_H__

/* 数据类型定义 */
#include "typedef.h"

/* 软件定时器ID */
typedef enum
{
    SOFT_TIMER_LED,     /* led定时器 */
    SOFT_TIMER_CARD,    /* 测卡定时器 */
    SOFT_TIMER_KEY,     /* 按键扫描定时器 */
    SOFT_TIMER_TOTAL,   /* 定时器总个数 */
} TIMER_ID;

/*******************************************************************************
** 函数名称：SoftTimer_InterruptHandle
** 函数作用：软件定时器的中断处理
** 输入参数：无
** 输出参数：无
** 使用范例：SoftTimer_InterruptHandle();
** 函数备注：
*******************************************************************************/
void SoftTimer_Init();

/*******************************************************************************
** 函数名称：SoftTimer_Setup
** 函数作用：配置某个软件定时器
** 输入参数：index - 软件定时器ID
**           interval - 定时时间
**           isPeriod - 是否周期执行
**           cb - 周期执行时的回调函数
** 输出参数：无
** 使用范例：SoftTimer_Setup(0, 100, GM_FALSE, GM_NULL);
** 函数备注：此函数不会启动定时器运行
*******************************************************************************/
void SoftTimer_Setup(GM_U8 index, GM_U16 interval, GM_BOOL isPeriod, GM_CALLBACK *cb);

/*******************************************************************************
** 函数名称：SoftTimer_Start
** 函数作用：启动某个软件定时器
** 输入参数：
** 输出参数：无
** 使用范例：SoftTimer_Start(0, 100, GM_FALSE, GM_NULL);
** 函数备注：
*******************************************************************************/
void SoftTimer_Start(GM_U8 index);

/*******************************************************************************
** 函数名称：SoftTimer_Stop
** 函数作用：停止某个软件定时器
** 输入参数：index - 软件定时器ID
** 输出参数：无
** 使用范例：SoftTimer_Stop(0);
** 函数备注：
*******************************************************************************/
void SoftTimer_Stop(GM_U8 index);

/*******************************************************************************
** 函数名称：SoftTimer_StopAll
** 函数作用：停止全部软件定时器
** 输入参数：无
** 输出参数：无
** 使用范例：SoftTimer_StopAll();
** 函数备注：
*******************************************************************************/
void SoftTimer_StopAll();

/*******************************************************************************
** 函数名称：SoftTimer_ClearCount
** 函数作用：清除一个定时器计数值，即复位
** 输入参数：index - 软件定时器ID
** 输出参数：无
** 使用范例：SoftTimer_ClearCount(0);
** 函数备注：
*******************************************************************************/
void SoftTimer_Reload(GM_U8 index);

/*******************************************************************************
** 函数名称：SoftTimer_CheckTimeout
** 函数作用：检测某个软件定时器是否超时
** 输入参数：index - 软件定时器ID
** 输出参数：无
** 使用范例：GM_BOOL res = SoftTimer_CheckTimeout(0);
** 函数备注：
*******************************************************************************/
GM_BOOL SoftTimer_CheckTimeout(GM_U8 index);

/*******************************************************************************
** 函数名称：SoftTimer_ClearTimeout
** 函数作用：清除某个软件定时器超时标志
** 输入参数：index - 软件定时器ID
** 输出参数：无
** 使用范例：SoftTimer_ClearTimeout(0);
** 函数备注：
*******************************************************************************/
void SoftTimer_ClearTimeout(GM_U8 index);

/*******************************************************************************
** 函数名称：SoftTimer_TicksHandle
** 函数作用：软件定时器的滴答处理
** 输入参数：无
** 输出参数：无
** 使用范例：SoftTimer_TicksHandle();
** 函数备注：此函数须在中断中或定时调用
*******************************************************************************/
void SoftTimer_TicksHandle();

/*******************************************************************************
** 函数名称：SoftTimer_EventHandle
** 函数作用：软件定时器的事件处理
** 输入参数：无
** 输出参数：无
** 使用范例：SoftTimer_EventHandle();
** 函数备注：
*******************************************************************************/
void SoftTimer_EventHandler();

#endif  /* __SOFT_TIMER_H__ */
